# json序列化与反序列化
import json
info = {"age":'18'}
json_info = json.dumps(info)
# dumps()方法返回一个str，内容就是标准的JSON。类似的，dump()方法可以直接把JSON写入一个file-like Object
print(json_info,type(json_info))
# loads()或者对应的load()方法，前者把JSON的字符串反序列化，后者从file-like Object中读取字符串并反序列化
print(json.loads(json_info),type(json.loads(json_info)))


# 自定义序列化和反序列化
class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

s = Student('Bob', 20, 88)
# 默认情况下，dumps()方法不知道如何将Student实例变为一个JSON的{}对象。
# print(json.dumps(s))
def student2dict(std):
    return {
        'name': std.name,
        'age': std.age,
        'score': std.score
    }
# 设置序列化方法
print(json.dumps(s,default=student2dict))

# 我们可以偷个懒，把任意class的实例变为dict
print(json.dumps(s, default=lambda obj: obj.__dict__))

def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

json_str  = '{"age": 20, "name": "Bob", "score": 88}'
# 设置反序列化方法
print(json.loads(json_str, object_hook=dict2student))
